﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using CoVanHocTapData.Interface;
using CoVanHocTapData.Entities;

namespace CoVanHocTapData.Concretes
{
    public class MonHocDangKyRepository:IMonHocDangKyRepository
    {
        #region repos
        ISinhVienRepository svRepos = new SinhVienRepository();
        IChuongTrinhDaoTaoRepository ctdtRepos = new ChuongTrinhDaoTaoRepository();
        IQuyDinhMonHocDacBietRepository quyDinhMonHocDacBietRepos = new QuyDinhMonHocDacBietRepository();
        IMonHocTuongDuongRepository monHocTuongDuongRepos = new MonHocTuongDuongRepository();
        IKetQuaHocRepository ketQuaHocRepos = new KetQuaHocRepository();
        IRangBuocMonRepository rangBuocRepos = new RangBuocMonRepository();
        #endregion

        #region constructor
        DangKyPhuEntities entities;
        public MonHocDangKyRepository()
        {
            entities = new DangKyPhuEntities();
        }
        #endregion

        /// <summary>
        /// lay ds mh du kien mo theo nganh cua sv vs dk: sv chua dky o hky do va cac mon hoc nam trog ctdt cua nganh
        /// </summary>
        /// <param name="MSSV"></param>
        /// <param name="HocKyID"></param>
        /// <param name="MonHocIDList">ds mh trong ctdt</param>
        /// <returns></returns>
        public MonHocDangKy LayMonHocDuKienMo(SinhVien sv, int HocKyID, List<string> MonHocIDList,List<MonHoc> dsMHChuaHTTrongCTDT)
        {
           
            IKetQuaHocRepository ketQuaHocRepos = new KetQuaHocRepository();

            List<MonHoc> dsMHSVNenDangKy = new List<MonHoc>(); //ds mh sv nen dky

            var svDangKy = from m in entities.SinhVienMonDuKienMoes
                           where m.MSSV.Equals(sv.MSSV)
                           select m.MonDuKienMoID;
            var svDangKyMHDuKien = (from m in entities.SinhVienMonDuKienMoes
                                    join l in entities.MonDuKienMoes
                                    on m.MonDuKienMoID equals l.MonDuKienMoID
                                       join n in entities.MonHocs on m.MonDuKienMo.MonHocID equals n.MonHocID
                           where m.MSSV.Equals(sv.MSSV) && l.HocKyID.Value == HocKyID
                           select n);
            var monHocDuKienCTDT = from m in entities.MonDuKienMoes
                   join n in entities.MonHocs on m.MonHocID equals n.MonHocID
                   where m.HocKyID.Value == HocKyID
                   && !svDangKy.Contains(m.MonDuKienMoID)
                   && MonHocIDList.Contains(m.MonHocID)
                   orderby n.MonHocID
                   select n;
            //kiem tra mon dac biet nhu anh van
            var quyDinhMonDacBiet = quyDinhMonHocDacBietRepos.LayQuyDinhTheoNienKhoa(sv.Lop.NienKhoaID.Value);
            List<string> MonHocDacBietIDList = new List<string>();
            string[] splitMonHocDacBietID = quyDinhMonDacBiet.DanhSachMonHocID.Split(',');
            foreach (var splitItem in splitMonHocDacBietID)
            {
                if (splitItem != null || splitItem != "")
                {
                    MonHocDacBietIDList.Add(splitItem);
                }
            }

            List<MonHoc> dsMHDuocDangKy = new List<MonHoc>(); //ds mh sv dc phep dky dug de ktra do kho mh

            //int demSLRot = 0;
            //rang buoc mon
            foreach (var monHocItem in monHocDuKienCTDT)
            {
                
                //kiem tra mon dac biet truoc, vi mon dac biet khong quan tam rag buoc mon
                if (MonHocDacBietIDList.Contains(monHocItem.MonHocID))
                {
                    int soLuongToiDaRot = 0;
                    if (KiemTraMonDacBiet(sv, MonHocDacBietIDList, monHocItem, quyDinhMonDacBiet, out soLuongToiDaRot)) //true la cho phep dky
                    {
                        monHocItem.DuocDangKy = true;
                        //monHocItem.GoiY += "Vì sinh viên đã hoàn thành các học phần của " + quyDinhMonDacBiet.TenMonHocChung + " trước " + monHocItem.MonHocID + "-" + monHocItem.TenMonHoc + ".<br/>Do đó, sinh viên <b style='font-size:14px'>có thể đăng ký môn học này</b>";
                    }
                    else
                    {
                        monHocItem.DuocDangKy = false;
                        //monHocItem.GoiY += "Vì có " + soLuongToiDaRot + " học phần " + quyDinhMonDacBiet.TenMonHocChung + " trước " + monHocItem.MonHocID + "-" + monHocItem.TenMonHoc + " chưa hoàn thành. Do đó, sinh viên <b style='font-size:14px'>không được đăng ký môn học này</b>";

                    }
                    continue;
                }
                
                if (KiemTraRangBuocMon(sv, monHocItem))
                {
                    monHocItem.DuocDangKy = true;
                }
                else
                {
                    monHocItem.DuocDangKy = false;
                }

                if (monHocItem.DuocDangKy)
                    dsMHDuocDangKy.Add(monHocItem);
            }

            //mon hoc sinh vien nen dang ky
            List<string> maMHChuaHoanThanhList = dsMHChuaHTTrongCTDT.Select(m => m.MonHocID).ToList();

            
            var monHocDuKienChuaHT = from m in entities.MonDuKienMoes
                                   join n in entities.MonHocs on m.MonHocID equals n.MonHocID
                                   where m.HocKyID.Value == HocKyID
                                   && maMHChuaHoanThanhList.Contains(m.MonHocID)
                                   && MonHocIDList.Contains(m.MonHocID)
                                   orderby n.MonHocID
                                   select n;

            var monHocRangBuocDuKienChuaHT = (from m in entities.RangBuocMons
                                             join n in entities.MonHocs on m.MonHocIDTruoc equals n.MonHocID
                                             where m.HeDaoTaoID.Equals(sv.Lop.HeDaoTaoID)
                                             && m.NganhID.Equals(sv.Lop.NganhID)
                                             && monHocDuKienChuaHT.Contains(n)
                                             select n).Distinct();

            List<MonHoc> dsMHRangBuocSVNenDangKy = new List<MonHoc>();
            foreach (var rbDuKienItem in monHocRangBuocDuKienChuaHT)
            {
                if (MonHocDacBietIDList.Contains(rbDuKienItem.MonHocID))
                {
                    int soLuongToiDaRot = 0;
                    if (KiemTraMonDacBiet(sv, MonHocDacBietIDList, rbDuKienItem, quyDinhMonDacBiet, out soLuongToiDaRot)) //true la cho phep dky
                    {
                        if (dsMHRangBuocSVNenDangKy.IndexOf(rbDuKienItem) == -1)
                            dsMHRangBuocSVNenDangKy.Add(rbDuKienItem);
                        //monHocChuaHTItem.DuocDangKy = true;
                        //monHocItem.GoiY += "Vì sinh viên đã hoàn thành các học phần của " + quyDinhMonDacBiet.TenMonHocChung + " trước " + monHocItem.MonHocID + "-" + monHocItem.TenMonHoc + ".<br/>Do đó, sinh viên <b style='font-size:14px'>có thể đăng ký môn học này</b>";
                    }
                    continue;
                }
                dsMHRangBuocSVNenDangKy.Add(rbDuKienItem);
            }

            foreach (var monHocChuaHTItem in monHocDuKienChuaHT)
            {
                if(dsMHRangBuocSVNenDangKy.IndexOf(monHocChuaHTItem)!=-1)
                        continue;
                //kiem tra mon dac biet truoc, vi mon dac biet khong quan tam rag buoc mon
                if (MonHocDacBietIDList.Contains(monHocChuaHTItem.MonHocID))
                {
                    int soLuongToiDaRot = 0;
                    
                    if (KiemTraMonDacBiet(sv, MonHocDacBietIDList, monHocChuaHTItem, quyDinhMonDacBiet, out soLuongToiDaRot)) //true la cho phep dky
                    {
                        if (dsMHSVNenDangKy.IndexOf(monHocChuaHTItem) == -1)
                            dsMHSVNenDangKy.Add(monHocChuaHTItem);
                        //monHocChuaHTItem.DuocDangKy = true;
                        //monHocItem.GoiY += "Vì sinh viên đã hoàn thành các học phần của " + quyDinhMonDacBiet.TenMonHocChung + " trước " + monHocItem.MonHocID + "-" + monHocItem.TenMonHoc + ".<br/>Do đó, sinh viên <b style='font-size:14px'>có thể đăng ký môn học này</b>";
                    }                    
                    continue;
                }
                //rang buoc mon
                //string tienQuyet = "", truoc = "", songHanh = "";
                if (KiemTraRangBuocMon(sv, monHocChuaHTItem))
                {
                    monHocChuaHTItem.DuocDangKy = true;
                    
                    if (KiemTraMonTuongDuong(sv, monHocChuaHTItem.MonHocID)) //da hoc cac mon tuog duog cua monHocChuaHTItem
                    {
                        continue;
                    }
                    if (dsMHSVNenDangKy.IndexOf(monHocChuaHTItem)==-1)
                        dsMHSVNenDangKy.Add(monHocChuaHTItem);
                }


            }

            


            return new MonHocDangKy()
            {
                MonHocCTDT = monHocDuKienCTDT.ToList(),
                MonHocSVDangKy = svDangKyMHDuKien.ToList(),
                DsMonHocSVNenDKy = dsMHSVNenDangKy,
                DSMonHocRangBuocSVNenDKy = dsMHRangBuocSVNenDangKy,
                //DTBTLTheoKhoiCuaSV = dtbTheoKhoi,
                //DTBTLChungCuaSV = dtbtl
            };
        }

        public bool KiemTraMonDacBiet(SinhVien sv, List<string> MonHocDacBietIDList, MonHoc monHocItem, QuyDinhMonHocDacBiet quyDinhMonDacBiet, out int soLuongToiDaRot)
        {
            if (MonHocDacBietIDList.Contains(monHocItem.MonHocID))
            {
                
                soLuongToiDaRot = 0;
                if (monHocItem.MonHocID == "001001")
                    return true;
                monHocItem.GoiY = "";
                int vitri = MonHocDacBietIDList.IndexOf(monHocItem.MonHocID);
                if (!quyDinhMonDacBiet.RotLienTiepMonHocTruocDo.Value) //khong rot lien tiep mon hoc trog ds mon hoc dac biet
                {
                    monHocItem.TenMonHocDacBiet = quyDinhMonDacBiet.TenMonHocChung;
                    int slToiDaRot = quyDinhMonDacBiet.SLToiDaRotMHTruocDo.Value;
                    if (vitri == 0)
                    {
                        monHocItem.DuocDangKy = true;
                    }
                    else
                    {
                        int khongHoc = 0;
                        for (int kt = 0; kt < vitri; kt++)
                        {
                            var ketQuaHoc = ketQuaHocRepos.LayKetQuaHocTapCaoNhatTheoSVMonHoc(MonHocDacBietIDList[kt], sv.MSSV);
                            if (ketQuaHoc.DTB != null)
                            {
                                if (ketQuaHoc.DTB.Value < 5)
                                {
                                    khongHoc++;
                                }
                            }
                            else
                                khongHoc++;
                            if (khongHoc > slToiDaRot)
                                break;
                        }
                        if (khongHoc > slToiDaRot)
                        {
                            soLuongToiDaRot = slToiDaRot;
                            monHocItem.DuocDangKy = false;
                            monHocItem.GoiY += "Vì có " + slToiDaRot + " học phần " + quyDinhMonDacBiet.TenMonHocChung + " trước môn học " + monHocItem.TenMonHoc +"-"+ monHocItem.MonHocID + " hoàn thành. Do đó, sinh viên <b style='font-size:14px'>không được đăng ký môn học này</b>";
                            return false;
                        }
                        else
                        {
                            monHocItem.DuocDangKy = true;
                            monHocItem.GoiY += "Vì sinh viên đã hoàn thành các học phần của " + quyDinhMonDacBiet.TenMonHocChung + " trước môn học " + monHocItem.TenMonHoc + "-" + monHocItem.MonHocID + ".<br/>Do đó, sinh viên <b style='font-size:14px'>có thể đăng ký môn học này</b>";
                            return true;

                        }
                    }
                }
                else //rot mh lien tiep
                {
                    int slToiDaRot = quyDinhMonDacBiet.SLToiDaRotMHLienTiep.Value;
                    int vitriBatDau = vitri - slToiDaRot;
                    if (vitriBatDau < 0)
                        monHocItem.DuocDangKy = true;
                    else
                    {
                        int khongHoc = 0;
                        for (int kt = 0; kt < slToiDaRot; kt++)
                        {
                            var ketQuaHoc = ketQuaHocRepos.LayKetQuaHocTapCaoNhatTheoSVMonHoc(MonHocDacBietIDList[vitriBatDau + kt], sv.MSSV);
                            if (ketQuaHoc != null)
                            {
                                if (ketQuaHoc.DTB != null)
                                {
                                    if (ketQuaHoc.DTB.Value < 5)
                                    {
                                        khongHoc++;
                                    }
                                }
                                else
                                    khongHoc++;
                            }
                            else
                                khongHoc++;
                            
                        }
                        if (khongHoc >= slToiDaRot)
                        {
                            soLuongToiDaRot = slToiDaRot;
                            monHocItem.DuocDangKy = false;
                            monHocItem.GoiY += "Vì có " + slToiDaRot + " học phần " + quyDinhMonDacBiet.TenMonHocChung + " trước học phần " + monHocItem.TenMonHoc + " - " + monHocItem.MonHocID + " chưa hoàn thành. <br/>Do đó, sinh viên <b style='font-size:14px'>không được đăng ký môn học này</b>";
                            return false;
                        }
                        else
                        {
                            monHocItem.DuocDangKy = true;
                            monHocItem.GoiY += "Vì sinh viên đã hoàn thành các học phần của " + quyDinhMonDacBiet.TenMonHocChung + " trước môn học " + monHocItem.TenMonHoc + "-" + monHocItem.MonHocID + ".<br/>Do đó, sinh viên <b style='font-size:14px'>có thể đăng ký môn học này</b>";
                            return true;
                        }
                    }
                }

                
            }
            soLuongToiDaRot = 0;
            return true;
        }

        public bool KiemTraRangBuocMon(SinhVien sv, MonHoc monHocItem)
        {
            string songHanh = "", tienQuyet = "", truoc = "";
            if (rangBuocRepos.LayMonRangBuoc(monHocItem.MonHocID, sv.Lop.NganhID, out songHanh, out tienQuyet, out truoc))
            {
                //monHocItem.MonHocSongHanh = songHanh;
                //monHocItem.MonHocTienQuyet = tienQuyet;
                //monHocItem.MonHocTruoc = truoc;
                //ket qua cac mon rang buoc
                if (tienQuyet == "" && truoc == "" && songHanh == "")
                    monHocItem.DuocDangKy = true;
                else
                {
                    if (tienQuyet != "")
                    {
                        monHocItem.GoiY = "";
                        monHocItem.MonHocTienQuyet = tienQuyet;
                        string replaceString = tienQuyet.Replace("<br/>", ",");
                        string replaceString2 = replaceString.Replace("<b>", ",");
                        string replaceString3 = replaceString2.Replace("</b>", ",");
                        string[] spitReplace = replaceString3.Split(',');
                        List<string> maMonHocList = new List<string>();
                        foreach (var splitItem in spitReplace)
                        {
                            if (splitItem.IndexOf('-') == -1 && splitItem != "")
                                maMonHocList.Add(splitItem);
                        }
                        bool flag = false; //kiem tra mon hoc trong ds mon tien quyet co bi rot hay chua hoc hay khong
                        bool tuongduongFlag = false; //la mon tuong duong?
                        foreach (var monHocRangBuocItem in maMonHocList)
                        {
                            KetQuaHoc ketQua = ketQuaHocRepos.LayKetQuaHocTapCaoNhatTheoSVMonHoc(monHocRangBuocItem, sv.MSSV);
                            if (ketQua != null)
                            {

                                if (ketQua.DTB.Value >= 5)
                                    monHocItem.GoiY += "- Kết quả của môn học " + monHocRangBuocItem + " là: " + ketQua.DTB.Value + "<br/>";
                                else
                                {
                                    flag = true;
                                    break;
                                }
                            }
                            else
                            {
                                bool IsFail = false;
                                if (monHocTuongDuongRepos.KiemTraMonHocTuongDuong(monHocRangBuocItem))
                                {
                                    tuongduongFlag = true;
                                    var monHocTuongDuongList = MonHocTuongDuongRepository.LayMonHocTuongDuong(monHocRangBuocItem);
                                    monHocItem.GoiY += "Môn học " + monHocItem.MonHocID + " có môn học tương đương: ";
                                    foreach (var tuongDuongItem in monHocTuongDuongList)
                                    {
                                        KetQuaHoc ketQuaTuongDuong = ketQuaHocRepos.LayKetQuaHocTapCaoNhatTheoSVMonHoc(tuongDuongItem.MonHocIDTuongDuong, sv.MSSV);
                                        if (ketQuaTuongDuong == null)
                                        {
                                            monHocItem.GoiY += "- Môn " + tuongDuongItem.MonHocIDTuongDuong + " tương đương với môn học " + monHocItem.MonHocID + ". Sinh viên chưa học!";
                                            IsFail = true;
                                            break;
                                        }
                                        else
                                        {
                                            if (ketQuaTuongDuong.DTB.Value >= 5)
                                            {
                                                monHocItem.GoiY += "- Môn " + tuongDuongItem.MonHocIDTuongDuong + "tương đương với môn học " + monHocItem.MonHocID + ". Kết quả của môn tương đương là: " + ketQuaTuongDuong.DTB.Value;
                                                IsFail = false;
                                                continue;
                                            }
                                            else
                                            {
                                                monHocItem.GoiY += "- Môn " + tuongDuongItem.MonHocIDTuongDuong + "tương đương với môn học " + monHocItem.MonHocID + ". Kết quả của môn tương đương là: " + ketQuaTuongDuong.DTB.Value;
                                                IsFail = true;
                                                break;
                                            }
                                        }
                                    }
                                    if (!IsFail)
                                    {
                                        monHocItem.GoiY += "Các môn học tương đương với môn học " + monHocItem.MonHocID + " sinh viên đã hoàn thành.<br/>Do đó, sinh viên <b style='font-size:14px'>có thể đăng ký môn học này</b>";
                                        return true;
                                        //continue;
                                    }
                                    else
                                    {
                                        monHocItem.GoiY += "Các môn học tương đương với môn học " + monHocItem.MonHocID + " sinh viên chưa hoàn thành.<br/>Do đó, sinh viên <b style='font-size:14px'>không được đăng ký môn học này</b>";
                                        //continue;
                                        return false;
                                    }
                                }
                                else
                                {
                                    flag = true;
                                    break;
                                }

                            }
                        }
                        if (!tuongduongFlag)
                        {
                            if (!flag)
                            {
                                monHocItem.DuocDangKy = true;
                                monHocItem.GoiY += "&nbsp;&nbsp;Do đó, sinh viên <b style='font-size:14px'>có thể đăng ký môn học " + monHocItem.MonHocID + "</b>";
                                return true;
                            }
                            else
                            {
                                monHocItem.DuocDangKy = false;
                                monHocItem.GoiY += "&nbsp;&nbsp;Vì môn học tiên quyết sinh viên chưa hoàn thành (điểm chưa đạt), do đó sinh viên <b style='font-size:14px'>không được đăng ký môn học " + monHocItem.MonHocID + "</b>";
                                return false;
                            }
                        }
                    }
                    if (truoc != "")
                    {
                        monHocItem.GoiY = "";
                        monHocItem.MonHocTruoc = truoc;
                        string replaceString = truoc.Replace("<br/>", ",");
                        string replaceString2 = replaceString.Replace("<b>", ",");
                        string replaceString3 = replaceString2.Replace("</b>", ",");
                        string[] spitReplace = replaceString3.Split(',');
                        List<string> maMonHocList = new List<string>();
                        foreach (var splitItem in spitReplace)
                        {
                            if (splitItem.IndexOf('-') == -1 && splitItem != "")
                                maMonHocList.Add(splitItem);
                        }
                        bool flag = false; //kiem tra mon hoc trong ds mon hoc truoc xem sv co hoc hay khong
                        //bool tuongduongFlag = false;
                        foreach (var monHocRangBuocItem in maMonHocList)
                        {
                            KetQuaHoc ketQua = ketQuaHocRepos.LayKetQuaHocTapCaoNhatTheoSVMonHoc(monHocRangBuocItem, sv.MSSV);
                            if (ketQua != null)
                            {

                                monHocItem.GoiY += "<br/>- Kết quả của môn học " + monHocRangBuocItem + " là: " + ketQua.DTB.Value + "<br/>";
                            }
                            else
                            {
                                bool CoHoc = true;
                                if (monHocTuongDuongRepos.KiemTraMonHocTuongDuong(monHocRangBuocItem))
                                {

                                    var monHocTuongDuongList = MonHocTuongDuongRepository.LayMonHocTuongDuong(monHocRangBuocItem);
                                    monHocItem.GoiY += "Môn học " + monHocItem.MonHocID + " có môn học tương đương: ";
                                    string strTuongDuong = "";
                                    string tuongDuongKhongHoc = "";
                                    foreach (var tuongDuongItem in monHocTuongDuongList)
                                    {
                                        strTuongDuong += tuongDuongItem.MonHocIDTuongDuong + ",";
                                        KetQuaHoc ketQuaTuongDuong = ketQuaHocRepos.LayKetQuaHocTapCaoNhatTheoSVMonHoc(tuongDuongItem.MonHocIDTuongDuong, sv.MSSV);
                                        if (ketQuaTuongDuong == null)
                                        {
                                            CoHoc = false;
                                            tuongDuongKhongHoc = "<br/>Môn học tương đương " + tuongDuongItem.MonHocIDTuongDuong + " chưa được học<br/>";
                                        }
                                        else
                                        {
                                            CoHoc = true;

                                        }
                                    }
                                    monHocItem.GoiY += strTuongDuong.Remove(strTuongDuong.LastIndexOf(','));

                                    if (!CoHoc)
                                    {
                                        flag = true;

                                    }
                                    else
                                    {
                                        flag = false;
                                        monHocItem.GoiY += "<br/>Các môn tương đương trên sinh viên đều học và có điểm<br/>";

                                    }
                                }
                                else
                                {
                                    flag = true;
                                    break;
                                }
                            }
                        }
                        if (!flag)
                        {
                            monHocItem.DuocDangKy = true;
                            monHocItem.GoiY += "&nbsp;&nbsp;Do đó, sinh viên <b style='font-size:14px'>có thể đăng ký môn học " + monHocItem.MonHocID + "</b>";
                            return true;
                        }
                        else
                        {
                            monHocItem.DuocDangKy = false;
                            monHocItem.GoiY += "&nbsp;&nbsp;Vì môn học trước sinh viên chưa học, do đó sinh viên <b style='font-size:14px'> không được đăng ký môn học " + monHocItem.MonHocID + "</b>";
                            return false;
                        }

                    }
                    if (songHanh != "")
                    {
                        monHocItem.GoiY = "";
                        string maMHSongHanh = "";
                        monHocItem.MonHocSongHanh = songHanh;
                        string replaceString = songHanh.Replace("<br/>", ",");
                        string replaceString2 = replaceString.Replace("<b>", ",");
                        string replaceString3 = replaceString2.Replace("</b>", ",");
                        string[] spitReplace = replaceString3.Split(',');
                        List<string> maMonHocList = new List<string>();
                        foreach (var splitItem in spitReplace)
                        {
                            if (splitItem.IndexOf('-') == -1 && splitItem != "")
                            {
                                maMonHocList.Add(splitItem);
                                maMHSongHanh += splitItem + ", ";
                            }
                        }
                        maMHSongHanh = maMHSongHanh.Remove(maMHSongHanh.LastIndexOf(','));

                        foreach (var monHocRangBuocItem in maMonHocList)
                        {
                            monHocItem.GoiY += "- Môn học " + monHocItem.MonHocID + " có môn học song hành là <b style='font-size:14px'>" + maMHSongHanh + "</b><br/>";
                            monHocItem.GoiY += "&nbsp;&nbsp;Do đó, sinh viên có thể <b style='font-size:14px'>đăng ký các môn học song hành trong cùng một học kỳ</b> hoặc <b style='font-size:14px'>đăng ký môn học " + maMHSongHanh + " mà không cần đăng ký học môn " + monHocItem.MonHocID + "</b>.<br/>";
                            monHocItem.GoiY += "&nbsp;&nbsp;Tuy nhiên, sinh viên <b style='font-size:14px'>không được đăng ký học môn " + monHocItem.MonHocID + " mà không đăng ký môn học " + maMHSongHanh + " trong cùng một học kỳ</b><br/>";

                            break;
                        }
                        return true;
                    }
                }
            }
            return true;
        }

        public bool KiemTraMonTuongDuong(SinhVien sv, string monHocID)
        {
            if (monHocTuongDuongRepos.KiemTraMonHocTuongDuong(monHocID))
            {
                bool ChuaHoc = false; //chua hoc mon tuog duog
                //tuongduongFlag = true;
                var monHocTuongDuongList = MonHocTuongDuongRepository.LayMonHocTuongDuong(monHocID);
                // monHocItem.GoiY += "Môn học " + monHocItem.MonHocID + " có môn học tương đương: ";
                foreach (var tuongDuongItem in monHocTuongDuongList)
                {
                    KetQuaHoc ketQuaTuongDuong = ketQuaHocRepos.LayKetQuaHocTapCaoNhatTheoSVMonHoc(tuongDuongItem.MonHocIDTuongDuong, sv.MSSV);
                    if (ketQuaTuongDuong == null)
                    {
                        return false;
                    }
                    else
                    {
                        if (ketQuaTuongDuong.DTB.Value >= 5)
                        {
                            //monHocItem.GoiY += "- Môn " + tuongDuongItem.MonHocIDTuongDuong + "tương đương với môn học " + monHocItem.MonHocID + ". Kết quả của môn tương đương là: " + ketQuaTuongDuong.DTB.Value;
                            ChuaHoc = false;
                            continue;
                        }
                        else
                        {
                            //monHocItem.GoiY += "- Môn " + tuongDuongItem.MonHocIDTuongDuong + "tương đương với môn học " + monHocItem.MonHocID + ". Kết quả của môn tương đương là: " + ketQuaTuongDuong.DTB.Value;
                            ChuaHoc = true;
                            break;
                        }
                    }
                }
                if (!ChuaHoc)
                {
                    //monHocItem.GoiY += "Các môn học tương đương với môn học " + monHocItem.MonHocID + " sinh viên đã hoàn thành.<br/>Do đó, sinh viên <b style='font-size:14px'>có thể đăng ký môn học này</b>";
                    return true;
                    //continue;
                }
                else
                {
                    //monHocItem.GoiY += "Các môn học tương đương với môn học " + monHocItem.MonHocID + " sinh viên chưa hoàn thành.<br/>Do đó, sinh viên <b style='font-size:14px'>không được đăng ký môn học này</b>";
                    //continue;
                    return false;
                }
            }
            return false;
        }

        public MonHocDangKy LayMonHocDangKyKHHT(string MSSV, int HocKyID)
        {
            SinhVien sv = svRepos.LaySVDangNhap(MSSV);
            //chuong trinh dao tao
            List<string> ctdt = ctdtRepos.LayMonHocIDChuongTrinhDaoTao(sv.Lop.NganhID, sv.Lop.NienKhoaID.Value, sv.Lop.HeDaoTaoID).ToList();
            List<MonHoc> dsMHHT = new List<MonHoc>();
            List<MonHoc> dsMHChuaHT = new List<MonHoc>();
            ketQuaHocRepos.DSMonHocTichLuy(sv, sv.Lop.NienKhoaID.Value, sv.Lop.NganhID, sv.Lop.HeDaoTaoID, 1,out dsMHHT,out dsMHChuaHT);
            //var MHDuKienMoList = LayMonHocDuKienMo(MSSV, HocKyID);
            return LayMonHocDuKienMo(sv, HocKyID, ctdt, dsMHChuaHT);

        }



        
    }
}
